Skip to content

Symfony 8 / PHP 8.5: runtime extensions, decoupled label, improved caching#3

Merged
wtorsi merged 1 commit intomainfrom
8.0
Feb 20, 2026
Merged

Symfony 8 / PHP 8.5: runtime extensions, decoupled label, improved caching#3
wtorsi merged 1 commit intomainfrom
8.0

Conversation

@wtorsi
Copy link
Contributor

@wtorsi wtorsi commented Feb 20, 2026

Summary

  • RuntimeExtensionInterface — post-cache extension pipeline that walks the item tree on every request, enabling fresh dynamic data (badges, counters) without sacrificing the cached tree structure
  • BadgeExtension converted to RuntimeExtensionInterface — resolves int and \Closure badges at runtime instead of build time
  • Item::setExtra() — new method for runtime mutation of item extras
  • LabelExtension decoupled from TranslatorInterface — translation belongs in Twig templates, not the build pipeline; symfony/translation-contracts removed from require
  • CoreExtension priority tag moved to #[AutoconfigureTag] attribute, removed from services.php
  • AbstractStaticNavigation deleted — runtime extensions replace the need for non-cached navigations with dynamic data
  • composer.jsonminimum-stability set to stable, improved SEO keywords
  • Updated README.md and CLAUDE.md to match current architecture

Test plan

  • All 144 tests pass
  • PHPStan level max — no errors
  • PHP-CS-Fixer — 0 violations
  • Verify runtime extensions apply badges post-cache in a real Symfony app
  • Verify AbstractCachedNavigation tree survives PSR-6 cache round-trip with runtime extensions

🤖 Generated with Claude Code

… decouple LabelExtension from translator

- RuntimeExtensionInterface: post-cache extension pipeline that walks the item tree on every request
- BadgeExtension: converted to RuntimeExtensionInterface, resolves int/Closure badges at runtime
- Item::setExtra(): new method for runtime mutation of extras
- LabelExtension: removed TranslatorInterface dependency (translation belongs in Twig templates)
- CoreExtension: priority tag moved to #[AutoconfigureTag] attribute
- AbstractStaticNavigation: deleted (runtime extensions replace the need for non-cached navigations)
- composer.json: removed translation-contracts, set minimum-stability to stable, improved SEO keywords
- Updated README.md and CLAUDE.md to match current architecture

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@wtorsi wtorsi merged commit d919519 into main Feb 20, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant